package com.example.demo.server.common;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;
import java.util.UUID;


public class UserUtils {

    /**
     * md5加密算法
     * @param input
     * @return
     */
    public static String getMD5Hash(String input) {
        StringBuilder encryptedStr = new StringBuilder();
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(input.getBytes());
            byte[] digest = md.digest();

            for (byte b : digest) {
                encryptedStr.append(String.format("%02x", b & 0xff));
            }
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return encryptedStr.toString();
    }


    /**
     * 加密
     * @param password
     * @return
     */
    public static String encrypt(String password) {
        // 1. 获取盐值
        String salt = UUID.randomUUID().toString().replace("-", "");
        // 2. md5加密
        String plusPassword = getMD5Hash(salt + password);
        // 3. 将盐值和加密密码组合返回
        return salt + "$" + plusPassword;
    }

    /**
     * 验密
     * @param password
     * @param dbPassword
     * @return
     */
    public static boolean confirm(String password, String dbPassword) {
        // 1. 获取到[盐值]和[正确的加密密码]
        String[] group = dbPassword.split("\\$");
        // 在split函数的参数字符串里，这个$有特殊含义，需要转义一下
        // 2. md5加密
        String plusPassword = getMD5Hash(group[0] + password);
        // 3. 对比
        return group[1].equals(plusPassword);
    }

    public static String getUsername() {
        // 获取当前时间戳
        long timestamp = System.currentTimeMillis();

        // 生成随机数
        Random random = new Random();
        int randomNumber = random.nextInt(100);

        // 结合时间戳和随机数生成唯一标识符
        String identifier = String.valueOf(timestamp) + String.valueOf(randomNumber);

        return identifier;
    }
}
